package com.janetfilter.core.enums;

import com.janetfilter.core.rulers.*;

/**
 * 规则类型枚举，定义了所有支持的过滤规则类型
 * 每种类型对应一个Ruler实现，用于执行不同的匹配操作
 */
public enum RuleType {
    /**
     * 前缀匹配：测试字符串是否以规则开头（区分大小写）
     */
    PREFIX(new PrefixRuler()),
    
    /**
     * 前缀匹配：测试字符串是否以规则开头（忽略大小写）
     */
    PREFIX_IC(new PrefixICRuler()),
    
    /**
     * 后缀匹配：测试字符串是否以规则结尾（区分大小写）
     */
    SUFFIX(new SuffixRuler()),
    
    /**
     * 后缀匹配：测试字符串是否以规则结尾（忽略大小写）
     */
    SUFFIX_IC(new SuffixICRuler()),
    
    /**
     * 关键词匹配：测试字符串是否包含规则（区分大小写）
     */
    KEYWORD(new KeywordRuler()),
    
    /**
     * 关键词匹配：测试字符串是否包含规则（忽略大小写）
     */
    KEYWORD_IC(new KeywordICRuler()),
    
    /**
     * 完全相等匹配：测试字符串是否与规则完全相同（区分大小写）
     */
    EQUAL(new EqualRuler()),
    
    /**
     * 完全相等匹配：测试字符串是否与规则完全相同（忽略大小写）
     */
    EQUAL_IC(new EqualICRuler()),
    
    /**
     * 正则表达式匹配：使用正则表达式测试字符串
     */
    REGEXP(new RegExpRuler());

    // 规则实现
    private final Ruler ruler;

    /**
     * 构造方法
     * 
     * @param ruler 规则实现
     */
    RuleType(Ruler ruler) { // 简单实现，没有使用懒加载
        this.ruler = ruler;
    }

    /**
     * 获取规则实现
     * 
     * @return 规则实现
     */
    public Ruler getRuler() {
        return ruler;
    }
}
